草庐IT

c++ - GLUT 和 C++ 类

全部标签

c++ - 我想制作自己的 Malloc

我想制作自己的malloc/free,这样我就可以制作一个精确的复制分配器。有哪位大师有什么提示和建议吗?我现在有几个问题:我是否应该只malloc大块内存,然后从中分配内存,这样我就不必调用系统调用?抄袭收藏家通常是如何完成的?我想这部分要有效地完成有点复杂。我天真的实现只是malloc剩余对象大小的block,这将需要2倍的空间。 最佳答案 有很多关于实现malloc和类似事物的优秀文献。但我注意到您在此处包含了C++——您是否知道可以使用C++编写您自己的new和delete实现?这可能有助于轻松完成此操作。无论如何,您想要的

c++ - 如何可靠地获取 C 风格数组的大小?

如何可靠地获取C风格数组的大小?经常推荐的方法貌似是使用sizeof,但是在foo函数中不起作用,其中传入了x:#includevoidfoo(intx[]){std::cerrthisquestion的答案推荐sizeof但他们并没有说如果你传递数组它(显然?)不起作用。那么,我必须改用哨兵吗?(我不认为我的foo函数的用户总是可以信任在末尾放置一个哨兵。当然,我可以使用std::vector,但是那么我就没有得到很好的速记语法{1,2,3,4,5}。) 最佳答案 在C中,C中的数组参数实际上只是指针,因此sizeof()将不起作

c++ - 什么是变量的链接和存储说明符?

当有人谈论变量存储类说明符时,他们在谈论什么?他们还经常在同一上下文中谈论变量链接,那是什么? 最佳答案 存储类说明符控制变量的存储和链接。这是两个不同的概念。C为变量指定了以下说明符:auto、extern、register、static。存储存储时间决定了你的变量在内存中的生存时间。存储时长分为静态、自动和动态三种。静态如果您的变量是在文件范围内声明的,或者带有extern或static说明符,它将具有静态存储。只要程序在执行,变量就会一直存在。创建这些变量不会花费执行时间。自动如果变量在函数中声明,但没有extern或stat

c++ - C 和 C++ 之间的主要区别是什么?您什么时候会选择一个而不是另一个?

对于那些对两者都有经验的人来说,主要区别是什么?对于两者的新手,学习哪个更好?在某些情况下您可能会选择C,但在其他情况下您会选择C++?是使用最适合工作的工具还是一个明显优于另一个的情况。我知道C++是C的“增强”,但它是在83年创建的,并没有完全取代C,所以它一定有更多的东西。我知道这个问题是主观的,我不是要挑起任何宗教war,所以请尽量客观。明确的优缺点和比较。 最佳答案 虽然C是一种纯过程语言,但C++是一种多范式语言。支持通用编程:允许编写一次代码,并将其用于不同的数据结构。元编程:允许利用模板在编译时生成高效代码。检查:允

c++ - 为什么gcc/clang要用两个128bit的xmm寄存器来传递一个值?

所以我偶然发现了一些我想了解的东西,因为它让我头疼。我有以下代码:#include#includetypedefunion{struct{floatx,y,z,w;}v;__m128m;}vec;vec__attribute__((noinline))square(veca){vecx={.m=_mm_mul_ps(a.m,a.m)};returnx;}intmain(intargc,char*argv[]){floatf=4.9;veca=(vec){f,f,f,f};vecres=square(a);//?printf("%f%f%f%f\n",res.v.x,res.v.y,re

c++ - 如何将 C++ vector 传递和访问到 OpenCL 内核?

我是C、C++和OpenCL的新手,目前正在尽最大努力学习它们。这是一个预先存在的C++函数,我试图找出如何使用C或C++绑定(bind)将其移植到OpenCL。#includeusingnamespacestd;classTest{private:doublea;vectorb;vectorc;vector>d;public:doublefoo(longx,doubley){//mathematicaloperations//usingx,y,a,b,c,d//andalsob.size()//tocalculatereturnvaluereturn0.0;}};大体上我的问题是如何

c++ - 如何将类方法作为 GLUT 回调传递?

我知道这个东西有用:voidmyDisplay(){...}intmain(){...glutDisplayFunc(myDisplay)...}所以我尝试将myDisplay()函数包含到我创建的类中。因为我想在将来用不同的类重载它。然而,编译器提示说argumentoftype'void(ClassBlah::)()'doesnotmatch'void(*)()'.这是我尝试做的:classClassBlah{....voidmyDisplay()....}......intmain(){...ClassBlahblahglutDisplayFunc(blah.myDisplay)

c++ - C/C++ __restrict 类型

有没有一种方法可以使用typedef整数/浮点类型来定义这意味着没有别名?等同于(但原始结构)的东西:templatestructrestrict{T*__restrictdata;};作为相关问题,是否可以询问gcc它确定指针的别名/无别名是什么? 最佳答案 如评论中所述,许多较新的C++编译器确实支持restrict类型限定符的C99实现。由于restrict在C++中不是保留关键字,因此编译器通常使用__restrict或__restrict__。两者GCC和VisualC++很好地记录这一点,并明确引用C99。C++1998

c++ - 类与结构的内存布局如何

我来自C编程,其中结构中的数据首先是顶级变量,然后是第二个、第三个等等。我现在正在用C++编程,我正在使用一个类。我基本上想要达到同样的效果,但我也想要get/set方法,也许还有其他方法(我也想尝试以C++风格来做,可能会学到一些新东西)。是否有保证,例如公共(public)变量将首先在内存中,然后是私有(private)变量? 最佳答案 Isthereaguaranteee.g.thatthepublicvariableswillbefirstinmemorythentheprivatevariable?不,这样的保证没有做出-

c++ - 类方法 VS 类静态函数 VS 简单函数 - 性能方面?

好的,这就是我想要的:我已经编写了几个要求非常高的函数(主要是在位图等上运行),它们必须尽可能快现在,我们还要提一下,这些函数也可以按类型分组,甚至可以按它们操作的变量类型分组。问题是,除了算法的实现之外,我还应该做些什么-从技术的角度来看-以免搞乱速度。现在,我正在考虑以下情况:将它们创建为简单的函数,并将必要的参数作为参数传递创建一个类(用于“分组”/组织目的)并将它们声明为静态按类型创建类,例如创建一个用于处理位图的类,为每个位图创建该类的一个新实例(例如Bitmap*myBitmap=newBitmap(1010);),并使用其内部方法对其进行操作(例如myBitmap->ge